Робота з базами даних в JAVA на основі з`єднання JDBC

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Білоруський державний університет інформатики і радіоелектроніки
кафедра інформаційних технологій і автоматизованих систем
РЕФЕРАТ
на тему:
«Робота з базами даних в JAVA на основі з'єднання JDBC»
Мінськ, 2008

Як ми знаємо, SQL-запити попередньо компілюються за місцем виконання. Отже, щоб прискорити їх виконання слід компіляцію запитів виконувати заздалегідь. Це реалізується командою divpareStatement класу PreparedStatement. Дана команда дозволяється використовувати SQL-запити з параметрами. Параметри вставляються в запити як знак питання. Спочатку розглянемо, як використовувати посібник divpareStatement на наступному прикладі:
try {
Connection db = DriverManager.getConnection (url);
String sq_str = "SELECT * FROM stud"; / / Рядок запиту на вибірку
PreparedStatement prst = db.divpareStatement (sq_str);
ResultSet rs = prst.executeQuery (); / / Змінна rs отримує набір вибраних записів
while (rs.next ()) {/ / Виконуємо перегляд записів набору
String s = rs.getString ("name") + "" + rs.getInt ("groupp");
/ / Отримуємо вміст полів name і
/ / Groupp поточного запису
System.out.println ("my-" + s );}// виводимо запис на екран
System.out.println ("OK");
/ / Db.close (); / / Закриваємо БД.
}
catch (Exception er)
{System.out.println ("Error has arised here:" + er);}
}
Інструкція на вибірку створюється в рядку
PreparedStatement prst = db.divpareStatement (sq_str);
Скомпільований заапрос виконується звичайним чином:
ResultSet rs = prst.executeQuery ()
Тепер припустимо, що ми хочемо виконати вибірку студентів, чий вік перевищує 19 років. У зв'язку з цим нам слід ввести в запит параметр. Робиться це таким чином:
try {
Connection db = DriverManager.getConnection (url);
String sq_str = "SELECT * FROM stud where age>?"; / / Рядок запиту на / / вибірку з параметром
PreparedStatement prst = db.divpareStatement (sq_str);
prst.setInt (1,23); / / установка значення параметра
ResultSet rs = prst.executeQuery (); / / Змінна rs отримує набір вибраних записів
while (rs.next ()) {/ / Виконуємо перегляд записів набору
String s = rs.getString ("name") + "" + rs.getInt ("groupp");
/ / Отримуємо вміст полів name і
/ / Groupp поточного запису
System.out.println ("my-" + s );}// виводимо запис на екран
System.out.println ("OK");
/ / Db.close (); / / Закриваємо БД.
}
catch (Exception er)
{System.out.println ("Error has arised here:" + er);}
}
}
Спочатку створюється запит на вибірку:
String sq_str = "SELECT * FROM stud where age>?"; / / Рядок запиту на / / вибірку з параметром
У цьому запиті місце параметра відзначено знаком питання. Установка значення параметра реалізується наступним чином:
prst.setInt (1,23);
Параметрами методу setInt є: номер вставляється параметра (у нашому прикладі - 1) та значення вставляється параметра (23) для поля age. Текстові значення вставляються за допомогою методу setString.
Звернемося до виклику збережених процедур.
На відміну від запитів з параметрами тут використовують клас CallableStatement. Таким чином, запит на виклик збереженої процедури може мати такий вигляд:
CallableStatement cs = db.divpareStatement ("call proc1 (?,?)");
cs.setSting (1, "hello");
cs.setInt (2,10);
У створюваному запиті вказується ім'я викликається процедури proc1 і позначаються позиції для параметрів знаком?. Установка значень параметрів проводиться вже знайомим нам чином. Тепер для ілюстрації наведемо код додатку, яке з'єднується з сервером SQL Server 2000 і викликає збережену процедуру на сервері. Ця процедура має наступний вигляд.
CREATE PROCEDURE [dbo]. Proc1
@ S varchar (16) OUTPUT
AS
Begin
SELECT @ s = "Hello From SQL Server"
END
RETURN 0
GO
У цій процедурі є вихідний параметр типу varchar. У тілі процедури він отримує значення текстового рядка "Hello From SQL Server". Таким чином, наше завдання полягає в тому, щоб правильно з'єднатися з сервером SQL Server, створити в додатку виклик процедури на сервері і встановити вихідний параметр. Цей параметр ми повинні будемо прочитати. Наведемо текст готового додатку і дамо до нього пояснення.

import java.awt .*;
import java.net .*;
import java.sql .*;
import java.io. *;
public class lab6
{
public static void main (String args [])
{
String url = "jdbc: odbc: sqlsource2";
try {
Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");}

catch (Exception e)
{System.out.println ("Classdefnotfound" + e);
}

try {

Connection db = DriverManager.getConnection (url);
CallableStatement cst = db.divpareCall ("{call proc1 (?)}");
cst.registerOutParameter (1, Types.VARCHAR, 16);
cst.execute ();
String str = cst.getString (1);
System.out.println (str); / / виводимо відповідь процедури на екран
System.out.println ("OK");
db.close (); / / Закриваємо з'єднання.
}
catch (Exception er)
{System.out.println ("Error has arised here:" + er);}
}
}
Виклик збереженої процедури виконується за допомогою класу CallableStatement. Інструкція по виклику процедури попередньо готується у команді:
CallableStatement cst = db.divpareCall ("{call proc1 (?)}");
Знак питання в дужках визначає місце для параметра. У нашому прикладі використовується один вихідний параметр. Кожен вихідний параметр повинен бути зареєстрований. Це виконує команда:
cst.registerOutParameter (1, Types.VARCHAR, 16);
Перший операнд даної команди визначає номер параметра (нумерація починається з 1). Другий операнд відповідає типу параметра (VARCHAR), третій операнд встановлює розмір параметра. Типи параметрів прописуються в пакеті java.sql .*. Інші типи параметрів наведені в таблиці 1, де зазначено таккже їх відповідність типам Java.
Таблиця 1
JDBC-тип
Java - тип
CHAR
String
VARCHAR
String
LONGVARCHAR
String
NUMERIC
java.math.BigDecimal
DECIMAL
java.math.BigDecimal
BIT
boolean
TINYINT
byte
SMALLINT
short
INTEGER
int
BIGINT
long
REAL
float
FLOAT
double
DOUBLE
double
BINARY
byte[]
VARBINARY
byte[]
LONGVARBINARY
byte[]
DATE
java.sql.Date
TIME
java.sql.Time
TIMESTAMP
java.sql.Timestamp
Виконання процедури реалізується командою
cst.execute ();
Для отримання значення, що повертається процедурою чи функцій слід використовувати такий синтаксис визначення виклику:

{? = Call procedure_name [(?,?, ...)]}
При передачі вхідних параметрів в збережену процедуру їх слід попередньо встановити. Це робиться за допомогою методу setXXX.
Розглянемо наступну збережену процедуру.
CREATE PROCEDURE [dbo]. Proc2 @ nomer int, @ name char (30) OUTPUT, @ group int OUTPUT
AS
BEGIN
DECLARE @ mycur CURSOR
SET @ mycur = CURSOR SCROLL STATIC FOR
SELECT * from we
Open @ mycur
IF (@ @ CURSOR_ROWS <@ nomer)
BEGIN
SET @ name = "#"
SET @ group =- 1
RETURN 1
END
ELSE
BEGIN
FETCH ABSOLUTE @ nomer FROM @ mycur INTO @ name, @ group
RETURN 0
END
END
GO
Тема цієї процедури має такий вигляд:
CREATE PROCEDURE [dbo]. Proc2 @ nomer int, @ name char (30) OUTPUT, @ group int OUTPUT
З нього видно, що процедура отримує один вхідний параметр - nomer (номер запису) і повертає два вихідних параметра - name (ім'я) і group (групу).
Тепер наведемо текст java-додатки, яке викликає дану збережену процедуру.
import java.awt .*;
import java.net .*;
import java.sql .*;
import java.io. *;
public class lab6
{
public static void main (String args [])
{
String url = "jdbc: odbc: sqlsource2";
try {
Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");}

catch (Exception e)
{System.out.println ("Classdefnotfound" + e);
}

try {

Connection db = DriverManager.getConnection (url);
CallableStatement cst = db.divpareCall ("{call proc2 (?,?,?)}");
cst.setInt (1,1);
cst.registerOutParameter (2, Types.VARCHAR, 16);
cst.registerOutParameter (3, Types.INTEGER);
cst.execute ();
String str = cst.getString (2) + "==" + cst.getInt (3);
System.out.println (str); / / виводимо відповідь процедури на екран
System.out.println ("OK");
db.close (); / / Закриваємо з'єднання.
}
catch (Exception er)
{System.out.println ("Error has arised here:" + er);}
}
}
Звернемо увагу на встановлення єдиного вхідного параметра:
cst.setInt (1,1);
Перший операнд цієї команди задає номер параметра, другий - його значення. Отримання значень повертаються процедурою, виконується командою
String str = cst.getString (2) + "==" + cst.getInt (3);
Тут формується рядок, що складається з двох вихідних параметрів, одержуваних за допомогою методу getXXX (n), де n - номер параметра.
На закінчення відзначимо, що параметри можуть мати тип INOUT, тобто бути одночасно вхідними і вихідними. Параметр такого типу перед викликом процедури повинен отримати значення і бути зареєстрованим.

ЛІТЕРАТУРА
1. Меградж З. Розробка додатків для електронної комерції на ORACLE і JAVA. Вільямс, 2000, 328с.
2. Пирогов В.П. MS SQL Server 2000. Управління та програмування. - СПб. БХВ.-2005,-600С.
3. Хол М., Браун Л. Програмування для WEB. Вільямс, 2002, - 1280с.
Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Реферат
18.5кб. | скачати


Схожі роботи:
Робота з базами даних
Робота з базами даних 2
Робота з базами даних в MS Excel
Робота з базами даних Microsoft
Робота з базами даних через інтерфейс
Реляційна модель даних у системах управління базами даних
Системи управління базами даних 2
Режим роботи з базами даних
Системи управління базами даних
© Усі права захищені
написати до нас